<?php

namespace config;

class Redis
{
    //创建静态私有的变量保存该类对象
    private static $instance;

    //防止直接创建对象
    private function __construct()
    {
    }
    //防止克隆对象
    private function __clone()
    {
    }
    public static function getInstance()
    {
        if (!self::$instance instanceof self || self::$instance->ping() === false || self::$instance->ping() !== 'PONG') {

            //加文件锁--防止并发 多次实例redis对象
            $file = fopen(__DIR__ . '/lock_redis.txt', 'w+');

            if (flock($file, LOCK_EX)) { //阻塞模式（后面的进程会一直等待前面的进程执行完毕）
                if (self::$instance && (self::$instance->ping() === true || self::$instance->ping() === 'PONG')) {
                    return self::$instance;
                } else {
                    self::$instance = new \redis;
                    self::$instance->connect('127.0.0.1', 6379);
                }

                return self::$instance;
                flock($file, LOCK_UN); //解锁
            }
            //关闭文件
            fclose($file);
        }
        return self::$instance;
    }
}
